//
//  BaseRequest.h
//  CoolTennisBall
//
//  Created by Coollang on 16/12/8.
//  Copyright © 2016年 CoolLang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <YTKNetwork/YTKNetwork.h>
#import <AFNetworking/AFNetworking.h>
#import "NSDate+FormateString.h"
#import "NSString+JCMD5Encryption.h"

typedef enum : NSInteger {
    //  七牛
    kGetQiNiuUpHeadIconTokenApi = -1, // 申请上传头像凭证
    kGetQiNiuUploadImageToMomentApi = -2,//获取朋友圈上传图像的Token
    
    //  login相关的接口（10-39）
    kLoginEmailSignUpApi = 10, // 邮箱注册
    kLoginEmailSignInApi = 11, // 邮箱登录
    kSaveUserInfoApi = 12,     // 保存个人信息
    kGetUserInfoApi = 13,      // 获取个人信息
    kUserFeedbackApi = 14,     // 用户反馈
    kFaceBookLoginApi = 15,    // facebook登录
    kGoogleLoginApi = 16,      // Google登录
    kLoginForgotpasswordApi = 17, // 找回密码
    
    //  视频模块(40-69)
    kGetVideoStarListApi = 40,    // 获取有视频的教练（大类）列表
    kGetVideoListForIDApi = 41,   // 根据教练（大类）ID获取视频列表
    
    // 朋友圈(70-99)
    kMomentsGetTopicList = 70,        // 获取帖子列表
    kMomentsPostTopic = 71,           // 发帖
    kMomentPostCommentResponse = 72,  // 发表评论或回复
    kMomentsTopicLike = 73,           // 帖子点赞
    kMomentsCancelTopicLike = 74,     // 取消帖子点赞
    kMomentsDeleteTopic = 75,         // 删除帖子
    kMomentsDeleteComment = 76,       // 删除评论
    kMomentsSpotterTopic = 77,        // 举报帖子
    kMomentGetMessageCount = 78,      // 获取消息条数
    kMomentGetMessageList = 79,       // 获取消息列表
    kMomentDeleteMessage = 80,        // 删除消息
    kMomentDeleteAllMessage = 81,     // 删除全部消息
    kMomentGetTopicDetial = 82,       // 获取帖子详情
    
    // 俱乐部（100-129）
    kClubCreatClub = 100,             //创建俱乐部
    kClubCreatEvent = 101,            //创建俱乐部新闻
    kClubFind = 102,                  //俱乐部首页列表
    kClubSearchClub = 103,            //搜索俱乐部
    kClubInfo = 104,                  //俱乐部详情
    kClubMessageList = 105,           //俱乐部留言
    kClubTargetSet = 106,             //设置俱乐部目标
    kClubMemberRanking = 107,         //俱乐部成员排行
    kClubMemberDetail = 108,          //俱乐部用户列表详情
    kClubSendMessage = 109,           //发布俱乐部留言
    kClubEventList = 110,             //俱乐部事件列表
    kClubSetPassword = 111,           //设置俱乐部密码
    kClubJoinClub = 112,              //申请加入俱乐部
    kClubMemberRank = 113,            //俱乐部排行榜
    kClubMyReportList = 114,          //运动报告列表
    kClubReportMemberList = 115,      //管理员获取周报人员列表
    kClubReportWeeklyDetail = 116,    //获取周报详情
    kClubReportCoachCommentUser = 117,//教练发布周报点评
    kClubReportGetMyCoachComment = 118,//获取教练给的周报点评
    kClubReportWeeklyDetailPro = 119,  //获取周报详情2
    kClubQuitClub = 120,               //退出俱乐部
    kClubEditClubInformation = 121,    //编辑俱乐部信息
    kClubDeleteClubMessage = 122,      //删除留言
    kClubDeleteClubEvent = 123,      //删除事件
    kClubSpotterClubOrMessage = 124,      //举报俱乐部或者留言
    
    // 硬件及运动相关（130-159）
    kSportUploadDaySportData = 130,         //上传日运动统计数据
    kDeviceGetDeviceVersion = 131,          // 获取固件版本
    kSportUploadDayDetailSportData = 132,   // 上传天的运动详情数据
    kSportGetDayStatisticsSportData = 133,  // 根据日期获取天的统计数据
    kSportGetDayDetailSportData = 134,      // 根据日期获取每一拍详情
    kSportGetHaveSportDataDays = 135,       // 获取有运动数据的日期
    kSportGetWeekStaticsisData = 136,       // 获取周的运动统计数据
    kSportGetMonthStaticsisData = 137,      // 获取月的运动统计数据
    kSportGetYearStaticsisData = 138,       // 获取年的运动统计数据
    kSportUploadTemplateToServer = 139,     // 上传模板
    kSportDeleteTemplateToServer = 140,     // 删除模板
    
} RequestApiType;

// 上传到七牛上的图片域名
#define kImageBaseUrl @"http://staticapp.coollang.com/"

// 用户隐私协议
#define kSettingPrivacyUrl @"http://www.coollang.com/appcontent/responsibility?type=35"

@interface YFBaseRequest : YTKRequest

@property (nonatomic,strong) id responseInfo;

/** 参数:子类可以设置这个参数来设置参数
 也可以通过重写'- (id)requestArgument'方法,会优先使用重写的方法
 */
@property (nonatomic, strong) NSDictionary *requestArgumentParma;
/** Api类型 */
@property (nonatomic, assign)RequestApiType apiType;

+ (NSString *)requestString:(RequestApiType)apiType;

+ (instancetype)requestApiWithType:(RequestApiType)apiType andParam:(id)param;

/** 错误处理
 当此方法返回为Nil 是，会调用系统统一的ret 错误处理方法
 作用: 用于子类重写来处理一些特殊的错误
 */
- (NSError *)disposeRequestErrorWithRet:(NSString *)ret;

@property (nonatomic, strong) NSError *reqError;

@end


#pragma mark - 统一修改请求路径和配置统一参数
@interface YFUrlArgumentsFilter:NSObject <YTKUrlFilterProtocol>
//  实现自己的 URL 拼接工具类
+ (YFUrlArgumentsFilter *)filterWithArguments:(NSDictionary *)arguments;
- (NSString *)filterUrl:(NSString *)originUrl withRequest:(YTKBaseRequest *)request;

@end

#pragma mark - 配置请求缓存文件
@interface YFUrlCacheDirPathFilter:NSObject <YTKCacheDirPathFilterProtocol>
@property (nonatomic, copy) NSString *userId;

+ (YFUrlCacheDirPathFilter *)filterWithArguments:(NSString *)userId;

// 切换用户则使用不同的缓存配置文件
- (NSString *)filterCacheDirPath:(NSString *)originPath withRequest:(YTKBaseRequest *)request;

@end


